package fr.n7.sma.model;

import fr.n7.sma.model.listeners.CellListener;

public interface ICell<CellAdditionnalProperty> extends CellListener<CellAdditionnalProperty>{

	//CellListener
	public void addCellListener(CellListener<CellAdditionnalProperty> cellListener);
	
	public void removeCellListener(CellListener<CellAdditionnalProperty> cellListener);

	//Resources
	public Short addOneResource(String name);
	
	public Short removeOneResource(String name);
	
	public Short addResource(short number, String name);
	
	public Short removeResource(short number, String name);

	//Attractor
	public void addAttractorEffect(int x, int y, Attractor<CellAdditionnalProperty> a);
	
	public void removeAttractorEffect(int x, int y, Attractor<CellAdditionnalProperty> a);
	
	public float getAttractorEffects();
	
	public void clearAttractorEffect(boolean attractor, boolean phero);
	
	//Phero
	public void addPheroEffect(int x, int y, Attractor<CellAdditionnalProperty> a);
	
	public float getPheroEffects();
	
	public void evaporate(float ratio);
}
